package admin

import (
	"MBGAdmin/controllers"
	"MBGAdmin/models"
	"MBGAdmin/util"
	"github.com/astaxie/beego/orm"
	"golang.org/x/crypto/bcrypt"
	"time"
)

// 登录控制器
type LoginController struct {
	controllers.BaseController
}

// 后台登录页面
func (c *LoginController) Get() {
	c.Display("admin/login/login.html")
}

// 后台登录提交
func (c *LoginController) Post() {
	// 获取表单提交的信息
	username := c.GetString("username")
	password := c.GetString("password")
	// 从数据库读取当前用户
	admin := models.Admins{Username: username}
	err := admin.GetAdminsByUsername()
	if err != nil {
		c.BaseResponse(1, "用户名不存在")
		return
	}
	// 验证密码是否匹配
	err = bcrypt.CompareHashAndPassword([]byte(util.PhpToGoLang(admin.Password)), []byte(password))
	if err != nil {
		c.BaseResponse(1, "密码校验不通过")
		return
	}
	// 验证用户是否被禁用
	if admin.Status != 1 {
		c.BaseResponse(1, "该用户已被禁用")
		return
	}

	// 修改此次登录的信息
	admin.LastLoginIp = c.Ctx.Input.IP()
	admin.LoginNum = admin.LoginNum + 1
	admin.LastLoginTime = orm.ToStr(time.Now().Unix())
	_ = admin.UpdateAdminsById()
	// 记录此次登录日志
	log := models.LoginLogs{
		InfoId:    uint(admin.Id),
		Username:  admin.Username,
		Type:      1,
		Password:  password,
		Ip:        c.Ctx.Input.IP(),
		Status:    1,
		CreatedAt: time.Now(),
		UpdatedAt: time.Now(),
	}
	_, _ = log.AddLoginLogs()
	// 设置session
	var lists []orm.ParamsList
	_, _ = orm.NewOrm().QueryTable(models.RoleMenu{}).Filter("role_id", admin.Role.Id).ValuesList(&lists, "menu")
	c.SetSession("menus", util.GetMenuStructByTopId(lists, 0, 2))
	c.SetSession("admin", admin)
	// 返回Response
	c.BaseResponse(0, "登录成功")
}

// 退出登录
func (c *LoginController) Logout() {
	c.DelSession("admin")
	c.Redirect("/admin/login", 302)
}

// 重定向到主页
func (c *LoginController) Index() {
	c.Redirect("/admin/index/index", 302)
}
